package com.platform.common.utils;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class MapUtil<K,V> {

    /**
     * 过滤map 中 value为空的
     * @param map
     * @return
     */
    public static <K,V> Map<K,V> filterNull(Map<K ,V> map){
        return map.entrySet().stream().filter(e->{
            return null!=e.getValue() && !"".equals(e.getValue());
        }).collect(Collectors.toMap(e->{
                return e.getKey();
            },e->{
                return e.getValue();
            })
        );
    }

    /**
     * 参数为偶数个，奇数位：K  偶数位：V
     * @param o
     * @param <K>
     * @param <V>
     * @return
     */
    public static <K,V> Map<K,V> of(Object ... o) {
        Map<K,V> params = new HashMap<>(o.length/2);
        for(int i=0;i<o.length;i++){
            K k = o[i]!=null?(K)o[i]:null;
            V v = o[++i]!=null?(V)o[i]:null;
            if(k!=null && v!=null) {
                params.put(k, v);
            }
        }
        return params;
    }


    /**
     * simple flat
     * @param list
     * @param keyField
     * @param valueField
     * @param <K>
     * @param <V>
     * @return
     */
    public static <K,V> Map<K,V> flat(List<Map<K,V>> list, String keyField, String valueField){
        Map<K, V> map = new HashMap<>();
        for (Map<K, V> e : list) {
            Object key = e.get(keyField);
            if(!StringUtils.isNullOrEmpty(key)){
                if (map.put((K)key, e.get(valueField)) != null) {
                    throw new IllegalStateException("Duplicate key");
                }
            }
        }
        return map;
    }


}
